[DllImport("shell32.dll", CharSet=CharSet.Auto)]
static extern uint ExtractIconEx(string szFileName, int nIconIndex,
IntPtr[] phiconLarge, IntPtr[] phiconSmall, uint nIcons);
<DllImport("shell32.dll", CharSet:=CharSet.Auto)> _
Function ExtractIconEx(ByVal szFileName As String, _
ByVal nIconIndex As Integer, _
ByVal phiconLarge As IntPtr, _
ByVal phiconSmall As IntPtr, _
ByVal nIcons As UInteger) As UInteger
End Function
Declare Function ExtractIconEx _
Lib "shell32.dll" _
Alias "ExtractIconExA" _
(ByVal lpszFile As String, _
ByVal nIconIndex As Integer, _
ByRef phiconLarge As Integer, _
ByRef phiconSmall As Integer, _
ByVal nIcons As Long) As Integer
None.
None.
Please add some!
namespace Martin.Hyldahl.Examples.ExtractIconEx
{
/*
* Example using ExtractIconEx
* Created by Martin Hyldahl (alanadin@post8.tele.dk)
* http://www.hyldahlnet.dk
*/
using System;
using System.Drawing;
using System.Runtime.InteropServices;
/// <summary>
/// Example using ExtractIconEx
/// </summary>
public class ExtractIconExample
{
/* CONSTRUCTORS */
static ExtractIconExample()
{
}
// HIDE INSTANCE CONSTRUCTOR
private ExtractIconExample()
{
}
[DllImport("Shell32", CharSet=CharSet.Auto)]
private static unsafe extern int ExtractIconEx (
string lpszFile,
int nIconIndex,
IntPtr[] phIconLarge,
IntPtr[] phIconSmall,
int nIcons);
[DllImport("user32.dll", EntryPoint="DestroyIcon", SetLastError=true)]
private static unsafe extern int DestroyIcon(IntPtr hIcon);
public static Icon ExtractIconFromExe(string file, bool large)
{
unsafe
{
int readIconCount = 0;
IntPtr[] hDummy = new IntPtr[1] {IntPtr.Zero};
IntPtr[] hIconEx = new IntPtr[1] {IntPtr.Zero};
try
{
if(large)
readIconCount = ExtractIconEx(file,0, hIconEx, hDummy, 1);
else
readIconCount = ExtractIconEx(file,0, hDummy, hIconEx, 1);
if(readIconCount > 0 && hIconEx[0] != IntPtr.Zero)
{
// GET FIRST EXTRACTED ICON
Icon extractedIcon = (Icon)Icon.FromHandle(hIconEx[0]).Clone();
return extractedIcon;
}
else // NO ICONS READ
return null;
}
catch(Exception ex)
{
/* EXTRACT ICON ERROR */
// BUBBLE UP
throw new ApplicationException("Could not extract icon", ex);
}
finally
{
// RELEASE RESOURCES
foreach(IntPtr ptr in hIconEx)
if(ptr != IntPtr.Zero)
DestroyIcon(ptr);
foreach(IntPtr ptr in hDummy)
if(ptr != IntPtr.Zero)
DestroyIcon(ptr);
}
}
}
}
}
Do you know one? Please contribute it!